﻿using EmbeddedSharp.Core;
using System;
using System.Collections.Generic;

namespace EmbeddedSharp.Scripting {
    public interface IContext : IDisposable {

        object GetVariable(string value);

        object Assign(string variableName, object value);

        void RemoveVariable(string p);

        object Evaluate(string input);

        bool HasVariable(string p);

        void Push(StackFrame frame);

        StackFrame Pop();

        StackFrame Peep();

        IExpressionParserFactory GetParserFactory();

        IFunctionManager GetFunctionManager();

        IUnaryFunctionFactory UnaryFunctionFactory {
            get;
        }

        object AddVariable(string name, object value);

        void Clear();

        void Run(string fileName);
    }
}
